<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>js中的错误处理</title>
	</head>
	<body>
		<script type="text/javascript" >
			/* 
				1.错误的类型：
						Error:所有错误的父类型
						ReferenceError: 引用的变量不存在
						TypeError: 数据类型不正确
						RangeError: 数据值不在其所允许的范围内 - 死循环
						SyntaxError: 语法错误
				2.错误处理：	
						捕获错误: try{} catch(){}
						抛出错误: throw error
				3.错误对象
						message属性: 错误相关信息
						stack属性: 记录信息
			*/

			//演示ReferenceError引用的变量不存在
			// console.log(a)

			//演示TypeError数据类型不正确
			// let a = 900
			// a()

			//演示RangeError数据值不在其所允许的范围内
			/* function demo(){
				demo()
			}	
			demo() */

			//演示SyntaxError: 语法错误
			// console.log(1

			//try{} catch(){}的使用
			/* let a = Date.now() % 2 ? ()=>{console.log('a被调用了')} : 100
			try {
				console.log(700)
				a()
				console.log(800)
			} 
			catch (err) {
				console.dir(err)
			}
			console.log(900) */

			//如何抛出一个错误
			function demo(){
				const date = Date.now()
				if(date % 2){
					console.log('当前时间戳是奇数，可以正常工作')
				}else{
					// console.log('当前时间戳是偶数，不能工作')
					throw new Error('当前时间戳是偶数，不能工作')
					// throw '当前时间戳是偶数，不能工作'
				}
			}
			
			try {
				demo()
			} 
			catch (error) {
				console.dir(error)
			}

			//try无法处理异步任务中的错误
			try {
				setTimeout(()=>{
					console.log(a)
				},1000)
			} 
			catch (error) {
				console.log(error)
			}
			console.log(900)
			
		</script>
	</body>
</html>